package org.lq.shopping.util;


import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisUtil {

	    //服务器IP地址
	    private static String ADDR = "127.0.0.1";
	    //端口
	    private static int PORT = 6379;
	    //密码
	    private static String AUTH = "123456";
	    //连接实例的最大连接数
	    private static int MAX_ACTIVE = 1024;
	    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例，默认值也是8。
	    private static int MAX_IDLE = 200;
	    //等待可用连接的最大时间，单位毫秒，默认值为-1，表示永不超时。如果超过等待时间，则直接抛出JedisConnectionException
	    private static int MAX_WAIT = 10000;

	    //连接超时的时间
	    private static int TIMEOUT = 10000;
	    
	    // 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
	    private static boolean TEST_ON_BORROW = true;

	    private static JedisPool jedisPool = null;

	    /**
	     * 初始化Redis连接池
	     */

	    static {

	        try {
	        	
	            JedisPoolConfig config = new JedisPoolConfig();
	            //控制最大连接数
	            config.setMaxTotal(MAX_ACTIVE);
	            //设置空闲数
	            config.setMaxIdle(MAX_IDLE);
	            //默认为-1,等待时间,如果需要时间内没有获取到连接,直接抛出异常
	            config.setMaxWaitMillis(MAX_WAIT);
	            //在获取连接之前先进行,validate操作,保证得到的连接是可用的
	            config.setTestOnBorrow(TEST_ON_BORROW);
	            //当返回一个连接给pool的时候先进行ping()判断是否可以连接
	            config.setTestOnReturn(true);
	            
	            jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);

	        } catch (Exception e) {

	            e.printStackTrace();
	        }

	    }

	    /**
	     * 获取Jedis实例
	     */

	    public synchronized static Jedis getJedis() {

	        try {

	            if (jedisPool != null) {
	            	//一个redis的连接对象
	                Jedis resource = jedisPool.getResource();
	                return resource;
	            } else {
	                return null;
	            }

	        } catch (Exception e) {
	            e.printStackTrace();
	            return null;
	        }

	    }

	    /***
	     * 
	     * 释放资源
	     */
	    
	    public static void returnResource(final Jedis jedis) {
	            if(jedis != null) {
	                jedisPool.returnResource(jedis);
	            }
	        
	    }
	    
	    
}
